-- 2. 释放可重入锁脚本
-- 参数说明同上
local lockKey = KEYS[1]
local threadId = ARGV[2]

-- 检查锁是否存在
local currentLock = redis.call('hget', lockKey, 'owner')

-- 情况1：锁不存在或已释放
if not currentLock then
    return 1    -- 释放成功（逻辑上的成功）
end

-- 情况2：锁不属于当前线程（非法释放）
if currentLock ~= threadId then
    return 0    -- 释放失败
end

-- 情况3：锁属于当前线程，处理重入计数
local currentCount = tonumber(redis.call('hget', lockKey, 'count'))
if currentCount > 1 then
    -- 重入计数减1，刷新过期时间
    redis.call('hset', lockKey, 'count', currentCount - 1)
    redis.call('pexpire', lockKey, ARGV[1])
    return 1    -- 部分释放成功
else
    -- 最后一次释放，删除锁
    redis.call('del', lockKey)
    return 1    -- 完全释放成功
end